{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# obligatory import statements\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as pl\n",
    "from scipy.optimize import minimize\n",
    "from scipy.ndimage import median_filter\n",
    "from scipy.stats.kde import gaussian_kde\n",
    "from sklearn.metrics import mean_squared_error, mean_squared_log_error, mean_absolute_error\n",
    "from sympy import symbols, log, sqrt, Piecewise\n",
    "from sympy.functions import Abs\n",
    "from sympy.plotting import plot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Choosing a loss function for regression \n",
    "\n",
    "---\n",
    "**TL;DR**\n",
    "\n",
    "In short, the workflow can be summarized as follows:\n",
    "1. Choose MSE\n",
    "2. Check distribution of residual errors\n",
    "3. If this is symmetric with heavy tails consider Huber\n",
    "4. Else if the values are positive (although offset can deal with negative values) and the errors are positively skewed with a heavy right tail consider MSLE\n",
    "\n",
    "---\n",
    "\n",
    "\n",
    "\n",
    "With the regression data frame analytics jobs we now support three different loss functions: `mse`, `msle`, and `huber`. While all three of them can be used to train a model to predict real-valued data by minimizing average loss between actual values $a_i$ and predictions $p_i$\n",
    "$$\\frac{1}{N}\\sum_{i=1}^{N}L(a_i,p_i),$$\n",
    "they would work best in different scenarios. Let's look at what loss function works best for which case. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Mean squared error (MSE)\n",
    "\n",
    "[MSE](https://en.wikipedia.org/wiki/Mean_squared_error) is the most commonly used loss function. It works well in many scenarios and you should try it if you are unsure which loss function to use or you don't know much about your data. \n",
    "\n",
    "As the name suggests, MSE minimizes the quadratic difference between the prediction and the actual value:\n",
    "$$L(a_i,p_i) = \\tfrac{1}{2}(a_i-p_i)^2$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a = symbols('a') #actual value\n",
    "p = symbols('p') #predicted value\n",
    "mse = lambda a,p: (a-p)**2\n",
    "mse_plot = plot(mse(0, p),(p, -3, 3), show=False, legend=True, line_color=\"red\")\n",
    "mse_plot[0].label='MSE'\n",
    "mse_plot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The problem with the squared error is that it makes small errors (< 1.0) even smaller and large large errors (>1.0) disproportionately larger.\n",
    "\n",
    "This means that if you have a few outliers in your data, for example, due to a large measurement error, the model will put useless effort to fit these data points often degrading the accuracy of the majority of predictions as a result. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Let's see how to identify \n",
    "np.random.seed(1000)\n",
    "N = 10000\n",
    "w = np.ones(5)\n",
    "X = np.random.randn(N, 5)\n",
    "y = X.dot(w)\n",
    "\n",
    "# The last 1000 target values get some serious noise\n",
    "y[-1000:] += np.random.normal(0,100.0, 1000)\n",
    "\n",
    "mse = lambda x: mean_squared_error(y, X.dot(x))\n",
    "\n",
    "x0 = np.zeros(X.shape[1]) #initial guess\n",
    "result_w = minimize(mse, x0, tol=1e-5)['x'] #MSE result\n",
    "residuals_mse = y - X.dot(result_w)\n",
    "\n",
    "# Plot the distribution of the residuals\n",
    "kde = gaussian_kde(residuals_mse)\n",
    "dist_space = np.linspace(min(residuals_mse), max(residuals_mse), 100)\n",
    "_ = pl.plot(dist_space, kde(dist_space))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Datasets with large outliers show heavy tails in the residual distribution when trained using MSE as shown above. \n",
    "\n",
    "In these cases what you would usually want to do is instead of fitting the mean **squared** error to fit the mean **absolute** error (MAE)\n",
    "$$L(a_i,p_i) = \\vert a_i - p_i\\vert^2$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mae = lambda a,p: Abs(a-p)\n",
    "mae_plot = plot(mae(0, p),(p, -3, 3), show=False, line_color=\"blue\")\n",
    "mae_plot[0].label = \"MAE\"\n",
    "mse_plot.extend(mae_plot)\n",
    "mse_plot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "MAE does not over-prioritize outliers and it is easy to interpret: mean absolute error of 20 USD on price prediction means that you are on average 20 USD off your target mark in one way or another.\n",
    "\n",
    "Unfortunately, it is not straightforward to train models on MAE using conventional algorithms because of the sharp kink around `0.0`. For this reason, you may want to use a loss function that behaves as MAE for errors larger than 1 and as MSE for errors smaller than 1. This loss function is called [Huber loss](https://en.wikipedia.org/wiki/Huber_loss).\n",
    "\n",
    "## Huber loss\n",
    "\n",
    "Generally, Huber loss uses a parameter $\\delta$ to define the transition point between MSE and MAE:\n",
    "$$L(a, p) = \\left\\{\\begin{aligned}\n",
    "\\tfrac{1}{2}(a-p)^2 \\quad\\mathrm{for}\\ |a-p| \\le \\delta \\\\\n",
    "\\delta\\vert a - p \\vert - \\tfrac{1}{2}\\delta^2 \\quad\\mathrm{otherwise}\n",
    "\\end{aligned}\\right.\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "huber = lambda delta,a,p: Piecewise((0.5*(a-p)**2, Abs(a-p) <= delta), (delta*Abs(a-p)-0.5*delta**2, True))\n",
    "huber1_plot = plot(huber(1.0, 0, p),(p, -3, 3), show=False, line_color=\"green\")\n",
    "huber1_plot[0].label = \"Huber $\\delta=1.0$\"\n",
    "huber2_plot = plot(huber(2.0, 0, p),(p, -3, 3), show=False, line_color=\"turquoise\")\n",
    "huber2_plot[0].label = \"Huber $\\delta=2.0$\"\n",
    "mse_plot.extend(huber1_plot)\n",
    "mse_plot.extend(huber2_plot)\n",
    "mse_plot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Particularly interesting is that for $\\delta=1.0$ Huber loss is asymptotically similar to MAE and behaves as MSE around 0. For other values of $\\delta$, Huber loss still increases linearly for large errors and $\\delta$ controls simply the slope of this growth. \n",
    "\n",
    "In machine learning data frame analytics, we implemented the so-called [Pseudo-Huber loss](https://en.wikipedia.org/wiki/Huber_loss#Pseudo-Huber_loss_function)\n",
    "$$L(a_i,p_i) = \\delta^2 \\left(\\sqrt{1+((a_i-p_i)/\\delta)^2}-1\\right).$$\n",
    "\n",
    "This results in faster code while keeping the properties of the regular Huber loss."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pseudo_huber = lambda delta,a,p: delta**2*(sqrt(1+((a-p)/delta)**2)-1)\n",
    "pseudo_huber1 = plot(pseudo_huber(1.0, 0,p),(p, -3, 3), show=False, legend=True, line_color='lightgreen')\n",
    "pseudo_huber1[0].label='Pseud-Huber $\\delta=1.0$'\n",
    "huber1_plot.extend(pseudo_huber1)\n",
    "huber1_plot.legend = True\n",
    "huber1_plot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Conclusion \n",
    "\n",
    "To use Huber loss with a certain parameter $\\delta$ in your data frame analytics regression job, you can specify parameter `loss_function` (set it to `huber`) and `loss_function_parameter`. Use Huber loss if you have outliers in your data coming from measurement errors. This is often the case when you can see a symmetric heavy-tailed distribution of residuals after training your model with MSE loss function.\n",
    "\n",
    "You can experiment with different values of $\\delta$, also the default value 1.0 is fine for most cases."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Mean squared logarithmic error (MSLE)\n",
    "\n",
    "This loss function is used when you have positive targets distributed with a long tail such as log-normal distribution. There are [numerous examples](https://en.wikipedia.org/wiki/Log-normal_distribution#Occurrence_and_applications) of such data: house pricing, income of private households, city population, etc.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sympy.stats import LogNormal, density\n",
    "z = symbols('z')\n",
    "log_norm_1 = LogNormal(\"x\", 0, 1.0)\n",
    "log_norm_2 = LogNormal(\"x\", 0, 0.5)\n",
    "log_norm_3 = LogNormal(\"x\", 0, 0.25)\n",
    "pdf_plot1= plot(density(log_norm_1)(z), (z,0.01, 5), show=False, line_color=\"blue\")\n",
    "pdf_plot2= plot(density(log_norm_2)(z), (z,0.01, 5), show=False, line_color=\"green\")\n",
    "pdf_plot3= plot(density(log_norm_3)(z), (z,0.01, 5), show=False, line_color=\"red\")\n",
    "pdf_plot1.extend(pdf_plot2)\n",
    "pdf_plot1.extend(pdf_plot3)\n",
    "pdf_plot1.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "The distribution of the values has a \"bump\" for smaller values and then a long tail with a small number of very large values. \n",
    "\n",
    "Naturally, when you want to predict the target values, you want to allow for an error depending on the magnitude of the target. It’s ok to miss a population of a metropolitan area by 10 000, but for a small town it is unforgivable. In this case MSLE can be more suitable for the regression job than MSE. As the name suggests, MSLE minimizes the quadratic difference between the logarithms of the actual value and the prediction\n",
    "$$L(a_i, p_i) = (\\log(a_i + t) - \\log(p_i + t))^2$$\n",
    "\n",
    "For example, $\\log\\left((1 + 1100) / (1 + 1000)\\right)^2$ is about the same as $\\log((1 + 11000) / (1 + 10000))^2$ so missing a value by 10\\% is penalised equivalently whether the actual error is 100 or 1000. At the same time, with MSE the latter case costs 100x more.\n",
    "\n",
    "Qualitatively speaking, MSLE tends to lead to lower error for small targets and for higher error on large targets than MSE. This trade-off can be controlled by adjusting an offset parameter $t$ which is set to 1.0 by default. By increasing this parameter, you influence the “transition point” at which you go from minimizing quadratic error to minimizing quadratic log error. \n",
    "\n",
    "Let's take a look how this offset affects quantitative results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x1080 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# We generate random data and train a simple linear model to minimize\n",
    "# MSE and MSLE loss functions.\n",
    "np.random.seed(1000)\n",
    "N = 10000\n",
    "w = np.ones(5)\n",
    "X = np.random.randn(N, 5)\n",
    "y = X.dot(w)\n",
    "yexp = np.exp(y)\n",
    "\n",
    "mse = lambda x: mean_squared_error(yexp, X.dot(x))\n",
    "def msle(x, t=1): \n",
    "    pred = X.dot(x)+t\n",
    "    pred[pred<0] = 0\n",
    "    return mean_squared_log_error(yexp+t, pred)\n",
    "\n",
    "x0 = np.zeros(X.shape[1]) #initial guess\n",
    "res_mse = minimize(mse, x0, tol=1e-5) #MSE residuals\n",
    "results = {} #MSLE residuals for different offsets\n",
    "T = [1.0, 10.0, 100.0]\n",
    "for t in T:\n",
    "    results[t] = minimize(lambda x: msle(x, t), x0, tol=1e-5)\n",
    "\n",
    "sorted_idx = np.argsort(yexp)\n",
    "label_sorted = yexp[sorted_idx]\n",
    "def get_sorted_residuals(results):\n",
    "    residuals = yexp - X.dot(results['x'])\n",
    "    return residuals[sorted_idx]\n",
    "\n",
    "f, (axTop, axMiddle, axBottom) = pl.subplots(3, 1, sharex=True, figsize=(10, 15))\n",
    "\n",
    "# plot the density distribution of the target values on top\n",
    "kde = gaussian_kde(yexp)\n",
    "yrange = np.logspace(min(y), max(y), 100, base=np.exp(1))\n",
    "axTop.plot(yrange, kde(yrange))\n",
    "axTop.set_ylabel('density')\n",
    "\n",
    "# plot the magnitudes of residuals for MSE and MSLE with different offsets\n",
    "for t in T:\n",
    "    # use a median filter to smooth residuals and see the trend.\n",
    "    axMiddle.plot(label_sorted, median_filter(get_sorted_residuals(results[t]),  size=50), label='t={}'.format(t))\n",
    "    axBottom.plot(label_sorted, median_filter(get_sorted_residuals(results[t]),  size=50), label='t={}'.format(t))                        \n",
    "axMiddle.plot(label_sorted, median_filter(get_sorted_residuals(res_mse),  size=50), label='mse')\n",
    "axBottom.plot(label_sorted, median_filter(get_sorted_residuals(res_mse),  size=50), label='mse')\n",
    "\n",
    "axBottom.set_xscale('log')\n",
    "axBottom.set_xlabel('target')\n",
    "axBottom.set_xticks(np.logspace(-3,3,7))\n",
    "axMiddle.set_ylabel('residual')\n",
    "axBottom.set_ylabel('residual')\n",
    "axMiddle.set_ylim(800,1000)\n",
    "axBottom.set_ylim(-20,75)\n",
    "axMiddle.legend()\n",
    "\n",
    "pl.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note that the scale of the y-axis in the bottom has been changed to be able to see those small residuals!\n",
    "\n",
    "First, MSE tends to result in larger errors for small target values despite the fact that most of the targets are rather small. It rather focuses on producing smaller errors for large target values.\n",
    "\n",
    "Second, if you look at the density of the target values (top diagram), you see that qualitatively the \"transition point\" happens somewhere around 10: we have a high concentration of small targets <10 and low number of targets >>10. Quantitatively, this \"transition point\" is somewhere between 80th and 90th percentile. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Percentile 0\tvalue 0.00\n",
      "Percentile 10\tvalue 0.06\n",
      "Percentile 20\tvalue 0.15\n",
      "Percentile 30\tvalue 0.31\n",
      "Percentile 40\tvalue 0.54\n",
      "Percentile 50\tvalue 0.96\n",
      "Percentile 60\tvalue 1.74\n",
      "Percentile 70\tvalue 3.10\n",
      "Percentile 80\tvalue 6.18\n",
      "Percentile 90\tvalue 16.46\n",
      "Percentile 100\tvalue 4891.30\n"
     ]
    }
   ],
   "source": [
    "quantiles = np.linspace(0, 1.0, 11)\n",
    "qvalues = np.quantile(yexp, np.linspace(0, 1.0, 11))\n",
    "for q, val in zip(quantiles, qvalues):\n",
    "    print(\"Percentile {:.0f}\\tvalue {:.2f}\".format(q*100, val))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Setting the offset parameter to 1.0 or 100.0 undershoots and overshoots this \"transition point\". Both lead to similar results with greater residuals for small targets and lower residuals for large targets compared to the offset parameter of 10.0. However, trying to \"nail\" the correct transition point super exactly is not worth it: setting offset parameter to 6.0 or 16.0  won't change the results significantly compared to 10.0.\n",
    "\n",
    "### Conclusion\n",
    "\n",
    "To use MSLE with a certain parameter offset $t$ in your data frame analytics regression job, you can specify parameter `loss_function` (set it to `msle`) and `loss_function_parameter`. Try it, if you have one of the [numerous examples](https://en.wikipedia.org/wiki/Log-normal_distribution#Occurrence_and_applications) of positive target values which scale over a large scale.\n",
    "\n",
    "If you are unsure, train the model using MSE loss function and [test residual for normality](https://en.wikipedia.org/wiki/Normality_test). If normality cannot be assumed, then you should try MSLE as well.\n",
    "\n",
    "You can leave the `loss_function_parameter` as it is, but if you want to experiment with different offset values, it is recommended to set the value somewhere at the 80th percentile of the target distribution and then increase by an order of magnitude and look at the results qualitatively."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}